package design.singleton;

/**
 * 懒汉模式：延迟加载，只有在真正使用的时候，才开始实例化
 * 线程安全问题
 * double check 加锁优化
 * 编译器(JIT)，CPU有可能对指令进行重排序，导致使用到尚未初始化的实例，可以通过添加volatile关键字进行修饰
 */
public class LazySingleton {
    //这里是volatile 防止指令的重排序
    private static volatile LazySingleton instance;
    private LazySingleton(){

    }
    public static LazySingleton getInstance(){
        if(instance==null){
            synchronized (LazySingleton.class){
                if(instance==null){
                    instance = new LazySingleton();
                }
            }
        }
        return instance;
    }
}